/**
 * 有些api不是立刻生效的，需要settimeout包一层
*/
export function nextEventLoop(fn: Function, ...args: any[]) {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res(fn.apply(null, args))
        }, 0)
    })
}
/**
 * 异步等待时间
*/
export function sleep(time: number) {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res(true)
        }, time)
    })
}

/**
 * 获取GBK类型的数据，防止乱码
*/
export function fetchGBK(url: string) {
    return fetch(url).then(res => res.arrayBuffer()).then(res => new TextDecoder('gbk').decode(res));
}


/**
 * 下载函数，返回一个文件的id值 没啥用。
 * filename可以是单纯的文件名，如'foo.txt'；也可以带有相对路径，如'mypath/foo.txt'。会自动创建文件夹目录。
 * 但不可以是绝对路径，或是一个目录，也不可以在路径中包含上级路径'..'。如这三种情况都是非法的：'/mypath/foo.txt'、'mypath/'、'../mypath/foo.txt'。
*/
export function download(options: chrome.downloads.DownloadOptions): Promise<number> {
    return new Promise(res => {
        chrome.downloads.download(options, (id: number) => {
            res(id);
        });
    })

}